package com.ruoyi.project.system.service;

import java.util.Map;

import com.aliyuncs.push.model.v20160801.PushResponse;

/**
 * 阿里云推送服务接口
 * 
 * @author ruoyi
 */
public interface IAliyunPushService {

    /**
     * 推送通知消息到Android设备
     * 
     * @param title         标题
     * @param body          内容
     * @param target        推送目标类型(DEVICE/ACCOUNT/ALIAS/TAG/ALL)
     * @param targetValue   推送目标值
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToAndroid(String title, String body, String target,
            String targetValue, Map<String, Object> extParameters);

    /**
     * 推送通知消息到所有设备
     * 
     * @param title         标题
     * @param body          内容
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToAll(String title, String body, Map<String, Object> extParameters);

    /**
     * 推送通知消息到指定设备
     * 
     * @param deviceId      设备ID
     * @param title         标题
     * @param body          内容
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToDevice(String deviceId, String title, String body,
            Map<String, Object> extParameters);

    /**
     * 推送通知消息到指定别名
     * 
     * @param alias         别名
     * @param title         标题
     * @param body          内容
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToAlias(String alias, String title, String body,
            Map<String, Object> extParameters);

    /**
     * 推送通知消息到指定账号
     * 
     * @param account       账号
     * @param title         标题
     * @param body          内容
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToAccount(String account, String title, String body,
            Map<String, Object> extParameters);

    /**
     * 推送通知消息到指定标签
     * 
     * @param tag           标签
     * @param title         标题
     * @param body          内容
     * @param extParameters 额外参数，JSON格式
     * @return 推送结果
     */
    PushResponse pushMessageToTag(String tag, String title, String body,
            Map<String, Object> extParameters);
}